home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / DEF / Process / Transform / distribute next >
Text File  |  1998-10-23  |  4KB  |  86 lines

  1. distribute distribution-pattern zone-ranges distribution-type
  2.                         symbol-pattern &optional lengths zones
  3.  
  4. distribute allows to specify the distribution pattern, or a timesheet string, which controls to which zones of a section the values are distributed. If the distribution pattern is '(= x) then the first zone will be left empty, second is filled with symbols, 3rd is empty, the 4th is filled., etc. 
  5.  
  6. To control exactly how the distribution will happen, use a pattern of the same length than there are zones for the section. If the distribution pattern is shorter than there are zones in this section the distribution pattern is repeated. The distribution can be realized in one of the following ways, :once, :repeat and :restart, which work in the same way as in skip-zone.
  7.  
  8. Distribution pattern is the first parameter. The range is the second. :all guides the distribution to concentrate on all the zones of the section. To specify the start and end zones give the start and end zones in a list. If you are not sure how long the section is use :end keyword to indicate that distribution is performed to the end of the section. The distribution patterns is in effect at the beginning of the range.
  9.  
  10. The symbol pattern is always a flat, an ordinary symbol pattern. Use :collapse keyword within same-as, or collapse function to flatten zoned symbol patterns. Study the following examples.
  11.  
  12. (distribute '(= x) :all :restart  
  13.             (symbol-transpose 2 theme)
  14.             '(1/4 1/8 1/8)
  15.             '(1/2 1/2 1/2 1/2))
  16. --> (nil (c d e) nil (c d))
  17.  
  18. (distribute '(x) '(1 :end) :restart  
  19.             (symbol-transpose 2 theme)
  20.             '(1/4 1/8 1/8)
  21.             '(1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2))
  22. --> ((c d e) (c d e) (c d e) (c d e) (c d e) (c d) (c d e) (c d e))
  23.  
  24. This shows you how to distribute values to the 1st and 2nd zone of the section, and another values to the 3rd and 4th zone, each with its own distribution pattern and type.
  25.  
  26. (append (distribute '(= x) '(1 2) :repeat  
  27.                     '(a b)
  28.                     '(1/4 1/8 1/8)
  29.                     '(1/2 1/2 1/2 1/2))
  30.         (distribute '(x =) '(3 4) :once  
  31.                     '(x y)
  32.                     '(1/4 1/8 1/8)
  33.                     '(1/2 1/2 1/2 1/2)))
  34. --> (nil (a b a) (x y =) nil)
  35.  
  36. In use within a context you don't have to include the section length and zone values, since distribute automatically adjusts to the environment. If you use it alone to break up the source pattern into subpatterns you have to specify these items. Within def-class you would call the above example as:
  37.  
  38. (append (distribute '(= x) '(1 2) :repeat  
  39.                     '(a b))
  40.         (distribute '(x =) '(3 4) :once  
  41.                     '(x y)))
  42.  
  43. Here are some more examples for you to study.
  44.  
  45. (append (distribute '(x =) :all :once 
  46.                     '(a b c d e f))
  47.         (distribute '(x x) :all :repeat 
  48.                     '(q w e r t y)))
  49.  
  50. (distribute '(x = x x) :all :once 
  51.             '(1/2 1/4 1/8 1/16)
  52.             '(1/4 1/8 1/8)
  53.             '(1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2))
  54. --> ((1/2 1/4 1/8) nil (1/16 0 0) nil nil nil nil nil)
  55.  
  56. (distribute '(x = x x) :all :once 
  57.             '(64 54 44 34)
  58.             '(1/4 1/8 1/8)
  59.             '(1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2))
  60. --> ((64 54 44) nil (34 0 0) nil nil nil nil nil)
  61.  
  62. (distribute '(x = x x) :all :once
  63.             '(a b c d)
  64.             '(1/4 1/8 1/8)
  65.             '(1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2))
  66. --> ((a b c) nil (d a b) (c d a) (b c d) nil (a b c) (d a b))
  67.  
  68. (distribute '(x = x x) :all :repeat
  69.             '(a b c d)
  70.             '(1/4 1/8 1/8) 
  71.             '(-1/2 1/2 1/2 1/2 1/2 1/2 1/2 -1/2))
  72. --> (nil nil (a b c) (d a b) (c d a) nil (b c d) nil)
  73.  
  74. (distribute '(x = x x) :all :restart
  75.             '(a b c d)
  76.             '(1/4 1/8 1/8) 
  77.             '(-1/2 1/2 1/2 1/2 1/2 1/2 1/2 -1/2))
  78. --> (nil nil (a b c) (a b c) (a b c) nil (a b c) nil)
  79.  
  80. (distribute '(x = x x) :all :once
  81.             '(64 54 44 34 24 14 4)
  82.             '((1/4) (1/8))
  83.             '(1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2))
  84. -->((64 54) nil (44 34) (24 14 4 0) nil nil nil nil)
  85.  
  86.